package org.wikinews.controller;

import java.io.Serializable;
import java.util.List;

import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Begin;
import org.jboss.seam.annotations.End;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Out;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.faces.FacesMessages;
import org.wikinews.model.Tag;
import org.wikinews.model.Usuario;
import org.wikinews.repo.TagRepo;
import org.wikinews.repo.UsuarioRepo;

/**
 * Controller para criação e alteração de perfis.
 * 
 * @author leonardo
 *
 */
@Name("perfilCtrl")
@Scope(ScopeType.CONVERSATION)
public class PerfilCtrl implements Serializable {

	private static final long serialVersionUID = 6612582663398485318L;

	@In
	private FacesMessages facesMessages;

	@In
	private UsuarioRepo usuarioRepo;
	
	@In
	private TagRepo tagRepo;
	
	@In(value = "usuario", required = false)
	@Out(required = false)
	private Usuario usuarioLogado;

	private Usuario usuario;
	
	private String senha;
	
	private String confirmarSenha;
		
	private List<Tag> todasTags;

	public Usuario getUsuario() {
		return usuario;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public String getConfirmarSenha() {
		return confirmarSenha;
	}

	public void setConfirmarSenha(String confirmarSenha) {
		this.confirmarSenha = confirmarSenha;
	}
	
	public List<Tag> getTodasTags() {
		return todasTags;
	}
	
	@Begin(join = true)
	public String novo() {
		usuario = new Usuario();
		todasTags = tagRepo.getAll();
		return "/Perfil.xhtml";
	}
	
	@Begin(join = true)
	public String editar() {
		usuario = usuarioRepo.findById(Usuario.class, usuarioLogado.getId());
		todasTags = tagRepo.getAll();
		return "/EditarPerfilUsuario.xhtml";
	}
	
	@End
	public String salvar() {
		// TODO receber imagem do usuário
		
		Long id = usuario.getId();
		
		if (!validaSenha()) {
			return null;
		}
		
		if (senha != null && !senha.isEmpty()) {
			usuario.setSenha(senha);
		}
		
		usuarioRepo.persist(usuario);
		
		if (id == null) {
			facesMessages.add("Seu perfil foi criado com sucesso.");			
		} else {
			facesMessages.add("Seu perfil foi alterado com sucesso.");			
			usuarioLogado = usuario;
		}

		return "/home.xhtml";
	}

	private boolean validaSenha() {
		if (senha.isEmpty() && confirmarSenha.isEmpty()) {
			return true;
		}
		
		if (!senha.equals(confirmarSenha)) {
			facesMessages.add("Senha inválida.");
			return false;
		}

		return true;
	}

}
